
Ethan Collins
Pattern Recognition Specialist
TL;DR: Alur kerja CrewAI sering menghadapi CAPTCHA; mengintegrasikan CapSolver memungkinkan skrip otomatis menyelesaikannya secara efisien.

Ketika mengotomasi tugas dengan CrewAI, seperti web scraping atau menjelajahi web, CAPTCHA dapat dengan mudah menghentikan alur kerja Anda. Tantangan ini umum terjadi saat mengakses situs web yang dilindungi dan dapat mengganggu bahkan skrip otomatis yang telah dirancang dengan baik.
CapSolver menawarkan cara yang andal untuk menangani CAPTCHA, memungkinkan CrewAI melanjutkan tugasnya tanpa intervensi manual. Dengan mengintegrasikan CapSolver, Anda dapat menyederhanakan penjelajahan otomatis dan pengumpulan data sambil tetap mematuhi perlindungan situs web.
CrewAI adalah kerangka kerja Python yang ringkas dan cepat untuk membangun sistem agen AI otonom. Dibangun dari nol—sepenuhnya independen dari LangChain atau kerangka kerja agen lainnya—CrewAI menawarkan kenyamanan penggunaan tingkat tinggi dan kemampuan kustomisasi yang detail.
CrewAI beroperasi pada dua paradigma yang saling melengkapi:
| Komponen | Deskripsi |
|---|---|
| Kru | Tim agen multi yang bekerja sama secara otonom, memungkinkan penyelesaian masalah yang fleksibel dengan peran khusus |
| Alur | Alur kerja berbasis peristiwa yang menawarkan kontrol eksekusi yang presisi untuk logika bisnis yang kompleks |
CapSolver adalah layanan pemecah CAPTCHA yang terkemuka yang menyediakan solusi berbasis AI untuk mengatasi berbagai tantangan CAPTCHA. Dengan dukungan untuk berbagai jenis CAPTCHA dan waktu respons yang cepat, CapSolver dapat diintegrasikan dengan mulus ke dalam alur kerja otomatis.
Ketika membangun agen CrewAI yang berinteraksi dengan situs web—baik untuk pengumpulan data, pengujian otomatis, atau agregasi konten—tantangan CAPTCHA menjadi penghalang signifikan. Berikut adalah alasan mengapa integrasi ini penting:
Pertama, instal paket yang diperlukan:
pip install crewai
pip install 'crewai[tools]'
pip install requests
CrewAI memungkinkan Anda membuat alat kustom yang dapat digunakan agen untuk menyelesaikan tugas mereka. Berikut cara membuat alat CapSolver untuk menangani tantangan CAPTCHA:
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "API_KEY_CAPSOLVER_ANDA"
class CaptchaSolverInput(BaseModel):
"""Skema input untuk alat Pemecah CAPTCHA."""
website_url: str = Field(..., description="URL situs web dengan CAPTCHA")
website_key: str = Field(..., description="Kunci situs CAPTCHA")
captcha_type: str = Field(default="ReCaptchaV2TaskProxyLess", description="Jenis CAPTCHA yang ingin diselesaikan")
class CaptchaSolverTool(BaseTool):
name: str = "pemecah_captcha"
description: str = "Menyelesaikan tantangan CAPTCHA menggunakan API CapSolver. Mendukung reCAPTCHA v2, v3, Turnstile, dan lainnya."
args_schema: Type[BaseModel] = CaptchaSolverInput
def _run(self, website_url: str, website_key: str, captcha_type: str = "ReCaptchaV2TaskProxyLess") -> str:
# Buat tugas
create_task_url = "https://api.capsolver.com/createTask"
task_payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": captcha_type,
"websiteURL": website_url,
"websiteKey": website_key
}
}
response = requests.post(create_task_url, json=task_payload)
result = response.json()
if result.get("errorId") != 0:
return f"Kesalahan membuat tugas: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Poll hasil
get_result_url = "https://api.capsolver.com/getTaskResult"
for _ in range(60): # Maksimal 60 percobaan
time.sleep(2)
result_payload = {
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
response = requests.post(get_result_url, json=result_payload)
result = response.json()
if result.get("status") == "ready":
solution = result.get("solution", {})
return solution.get("gRecaptchaResponse") atau solution.get("token")
elif result.get("status") == "failed":
return f"Tugas gagal: {result.get('errorDescription')}"
return "Waktu tunggu solusi CAPTCHA habis"
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "API_KEY_CAPSOLVER_ANDA"
class ReCaptchaV2Input(BaseModel):
"""Skema input untuk pemecah reCAPTCHA v2."""
website_url: str = Field(..., description="URL situs web dengan reCAPTCHA v2")
website_key: str = Field(..., description="Kunci situs reCAPTCHA")
class ReCaptchaV2Tool(BaseTool):
name: str = "pemecah_recaptcha_v2"
description: str = "Menyelesaikan tantangan reCAPTCHA v2 menggunakan CapSolver"
args_schema: Type[BaseModel] = ReCaptchaV2Input
def _run(self, website_url: str, website_key: str) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
return self._solve_captcha(payload)
def _solve_captcha(self, payload: dict) -> str:
# Buat tugas
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Kesalahan: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Poll hasil
for percobaan in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Waktu tunggu solusi habis"
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "API_KEY_CAPSOLVER_ANDA"
class ReCaptchaV3Input(BaseModel):
"""Skema input untuk pemecah reCAPTCHA v3."""
website_url: str = Field(..., description="URL situs web dengan reCAPTCHA v3")
website_key: str = Field(..., description="Kunci situs reCAPTCHA")
page_action: str = Field(default="submit", description="Parameter aksi untuk reCAPTCHA v3")
class ReCaptchaV3Tool(BaseTool):
name: str = "pemecah_recaptcha_v3"
description: str = "Menyelesaikan tantangan reCAPTCHA v3 dengan verifikasi berbasis skor"
args_schema: Type[BaseModel] = ReCaptchaV3Input
def _run(
self,
website_url: str,
website_key: str,
page_action: str = "submit"
) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key,
"pageAction": page_action
}
}
# Buat tugas
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Kesalahan: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Poll hasil
for percobaan in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Waktu tunggu solusi habis"
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "API_KEY_CAPSOLVER_ANDA"
class TurnstileInput(BaseModel):
"""Skema input untuk pemecah Turnstile."""
website_url: str = Field(..., description="URL situs web dengan Turnstile")
website_key: str = Field(..., description="Kunci situs widget Turnstile")
class TurnstileTool(BaseTool):
name: str = "pemecah_turnstile"
description: str = "Menyelesaikan tantangan Cloudflare Turnstile"
args_schema: Type[BaseModel] = TurnstileInput
def _run(self, website_url: str, website_key: str) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
# Buat tugas
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Kesalahan: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Poll hasil
for percobaan in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Waktu tunggu solusi habis"
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "API_KEY_CAPSOLVER_ANDA"
class CloudflareChallengeInput(BaseModel):
"""Skema input untuk pemecah Cloudflare Challenge."""
website_url: str = Field(..., description="URL halaman yang dilindungi")
proxy: str = Field(..., description="Proxy dalam format: http://user:pass@ip:port")
class CloudflareChallengeTool(BaseTool):
name: str = "pemecah_challenge_cloudflare"
description: str = "Menyelesaikan halaman tantangan Cloudflare 5 detik"
args_schema: Type[BaseModel] = CloudflareChallengeInput
def _run(self, website_url: str, proxy: str) -> dict:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiCloudflareTask",
"websiteURL": website_url,
"proxy": proxy
}
}
# Buat tugas
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Kesalahan: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Poll hasil
for percobaan in range(60):
time.sleep(3)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return {
"cookies": result["solution"]["cookies"],
"user_agent": result["solution"]["userAgent"]
}
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Waktu tunggu solusi habis"
import requests
def access_cloudflare_protected_page(url: str, cf_solution: dict):
"""
Gunakan solusi tantangan Cloudflare untuk mengakses halaman yang dilindungi.
cf_solution berisi 'cookies' dan 'user_agent' dari CapSolver.
"""
# Buat sesi dengan cookie yang telah diselesaikan
session = requests.Session()
# Atur cookie dari solusi CapSolver
for cookie in cf_solution["cookies"]:
session.cookies.set(cookie["name"], cookie["value"])
# Atur user agent yang digunakan untuk menyelesaikan
headers = {
"User-Agent": cf_solution["user_agent"]
}
# Sekarang Anda dapat mengakses halaman yang dilindungi
response = session.get(url, headers=headers)
return response.text
### Contoh Pengambilan Data Lengkap
```python
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
CAPSOLVER_API_KEY = "KUNCI_API_ANDA_CAPSOLVER"
def solve_recaptcha(website_url: str, website_key: str) -> str:
"""Dapatkan token reCAPTCHA dari CapSolver"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"Kesalahan: {result.get('errorDescription')}")
task_id = result.get("taskId")
for _ in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
raise Exception(f"Gagal: {result.get('errorDescription')}")
raise Exception("Waktu habis")
def scrape_with_recaptcha(target_url: str, site_key: str):
"""Alur lengkap: selesaikan CAPTCHA → kirim → ambil data"""
driver = webdriver.Chrome()
driver.get(target_url)
try:
# 1. Selesaikan CAPTCHA
token = solve_recaptcha(target_url, site_key)
# 2. Sisipkan token
recaptcha_response = driver.find_element(By.ID, "g-recaptcha-response")
driver.execute_script("arguments[0].style.display = 'block';", recaptcha_response)
recaptcha_response.clear()
recaptcha_response.send_keys(token)
# 3. Kirim formulir
driver.find_element(By.TAG_NAME, "form").submit()
# 4. Ambil konten
time.sleep(3) # Tunggu hingga halaman dimuat
return driver.page_source
finally:
driver.quit()
Untuk skenario yang memerlukan otomatisasi browser dalam CrewAI, Anda dapat menggunakan ekstensi CapSolver:
Unduh Ekstensi: Dapatkan ekstensi CapSolver dari capsolver.com
Konfigurasi dengan Selenium/Playwright: Muat ekstensi di alat otomatisasi browser Anda
Mode Otomatis: Ekstensi secara otomatis mendeteksi dan menyelesaikan CAPTCHA
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Konfigurasi Chrome dengan ekstensi CapSolver
chrome_options = Options()
chrome_options.add_extension("path/to/capsolver-extension.crx")
driver = webdriver.Chrome(options=chrome_options)
# Ekstensi akan menangani CAPTCHA secara otomatis
driver.get("https://example.com/protected-page")
def solve_with_retry(self, payload: dict, max_retries: int = 3) -> str:
for attempt in range(max_retries):
try:
result = self._solve_captcha(payload)
if result:
return result
except Exception as e:
if attempt == max_retries - 1:
raise
time.sleep(2 ** attempt) # Backoff eksponensial
def check_balance() -> float:
response = requests.post(
"https://api.capsolver.com/getBalance",
json={"clientKey": CAPSOLVER_API_KEY}
)
return response.json().get("balance", 0)
Untuk akses berulang ke halaman yang sama, simpan token CAPTCHA ketika tepat:
from functools import lru_cache
from datetime import datetime, timedelta
captcha_cache = {}
def get_cached_token(website_url: str, website_key: str) -> str:
cache_key = f"{website_url}:{website_key}"
if cache_key in captcha_cache:
token, timestamp = captcha_cache[cache_key]
if datetime.now() - timestamp < timedelta(menit=2):
return token
# Selesaikan CAPTCHA baru
new_token = solve_captcha(website_url, website_key)
captcha_cache[cache_key] = (new_token, datetime.now())
return new_token
Mengintegrasikan CapSolver dengan CrewAI membuka potensi penuh agen AI otonom untuk tugas berbasis web. Dengan menggabungkan orkestrasi agen multi-CrewAI yang kuat dengan kemampuan penyelesaian CAPTCHA terkemuka industri CapSolver, pengembang dapat membangun solusi otomatisasi yang andal yang menangani mekanisme perlindungan web paling menantang.
Baik Anda membangun alur ekstraksi data, kerangka pengujian otomatis, atau agen web cerdas, kombinasi CrewAI + CapSolver memberikan keandalan dan skalabilitas yang diperlukan untuk lingkungan produksi.
Siap memulai? Daftar di CapSolver dan gunakan kode bonus CREWAI untuk bonus tambahan 6% pada setiap recharge Anda!

CrewAI adalah kerangka kerja Python yang ringan dan cepat untuk membangun sistem agen AI otonom. Ini memungkinkan pengembang untuk menciptakan kru agen AI yang bekerja sama untuk menyelesaikan tugas kompleks, dengan dukungan untuk pengambilan keputusan otonom dan kontrol alur kerja yang tepat.
CapSolver terintegrasi dengan CrewAI melalui alat khusus. Anda membuat alat yang mengapit API CapSolver, memungkinkan agen AI Anda untuk secara otomatis menyelesaikan tantangan CAPTCHA saat mereka menemukannya selama operasi web.
CapSolver mendukung berbagai jenis CAPTCHA termasuk reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, AWS WAF, GeeTest, dan banyak lagi.
CapSolver menawarkan harga kompetitif berdasarkan jenis dan volume CAPTCHA yang diselesaikan. Kunjungi capsolver.com untuk detail harga terkini. Gunakan kode CREWAI untuk bonus 6% pada recharge pertama Anda.
Ya! CapSolver menyediakan API REST yang dapat diintegrasikan dengan kerangka kerja Python apa pun, termasuk Scrapy, Selenium, Playwright, dan lainnya.
Ya, CrewAI open-source dan dirilis di bawah lisensi MIT. Kerangka kerja ini gratis digunakan, meskipun Anda mungkin menghadapi biaya untuk panggilan API LLM (seperti OpenAI) dan layanan penyelesaian CAPTCHA seperti CapSolver.
Kunci situs biasanya ditemukan dalam sumber HTML halaman. Cari:
Pelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.
